export * from './registry';

class EventEmitter {
  constructor() {
    this.listeners = {};
  }
  #create(eventName) {
    if (Object.hasOwn(this.listeners, eventName) === false) {
      this.listeners[eventName] = new Set();
    }
  }

  /**
   * 订阅事件
   *
   * @param {string} eventName 事件名称
   * @param {Function} listener 监听函数
   */
  on(eventName, listener) {
    this.#create(eventName);
    this.listeners[eventName].add(listener);
  }
  /**
   * 发布订阅事件
   *
   * @param {string} eventName 事件名称
   * @param  {...any} args 参数列表
   */
  emit(eventName, ...args) {
    this.listeners[eventName].forEach((listener) => listener(...args));
  }
}

export const eventEmitter = new EventEmitter();
